#include <head.h>

pthread_t Tid[3];//线程量
sem_t sem;//无名信号


void * func_1(void * val);
void * func_2(void * val);
void * func_3(void * val);

int main(int argc, char const *argv[])
{
    //初始化无名信号
    sem_init(&sem , 0 ,0);


    //线程创建

    pthread_create(&Tid[0] , NULL , func_1,NULL);
    pthread_create(&Tid[1] , NULL , func_2,NULL);
    pthread_create(&Tid[2] , NULL , func_3,NULL);
    
    //工作
    printf("各工序准备开始工作中.......\n");
    sleep(2);
    printf("开始工作\n");

    //v操作
    sem_post(&sem);
    //线程回收
    pthread_join(Tid[0],NULL);
    pthread_join(Tid[1],NULL);
    pthread_join(Tid[2],NULL);


    return 0;
}

void * func_1(void *val)
{


    printf("工序C准备开始工作\n");
    sem_wait(&sem);//p操作
    printf("工序C工作中......\n");
    sleep(2);
    printf("工序C完成工作\n");
    sem_post(&sem);//v操作


    return NULL;
}

void * func_2(void *val)
{

    printf("工序B准备开始工作\n");
    sem_wait(&sem);
    printf("工序B工作中......\n");
    sleep(2);
    printf("工序B完成工作\n");
    sem_post(&sem);

    return NULL;
}

void * func_3(void *val)
{   
    printf("工序A准备开始工作\n");
    sem_wait(&sem);
    printf("工序A工作中......\n");
    sleep(2);
    printf("工序A完成工作\n");
    sem_post(&sem);


    return NULL;
}